<?php
/**
 * Created by PhpStorm.
 * User: vbao
 * Date: 2016/6/13
 * Time: 10:55
 */

namespace Home\Controller;

use Think\Controller;
use QL\QueryList;

class NewCaijiController extends Controller
{
    public function _initialize()
    {
        set_time_limit(0);
        import('Org.JAE.QueryList');
        header("Content-type: text/html; charset=utf-8");



    }

    /**
     * 采集文章链接
     * 循环分类采集
     */
    public function caijiUrl()
    {
        //实时显示提示信息 html
        $ii = 0;
        G('begin');
        showMsgHtml();
        showMsg("准备采集文章链接!");
        sleep(C(SLEEP_TIME));
        $cjListMap = [
            'status' => 1,
        ];
        $cateData = get_cate_list($cjListMap);
//        dump($cateData);die;
        foreach ($cateData as $cKey => $cValue) {
            showMsg(" --  开始采集第" . $cValue['id'] . "个分类URL<br />");
            sleep(C(SLEEP_TIME));

            $listType = $cValue['list_type'];  //采集类型 1单一网址 ， 2通配符网址， 3json， 4rss

            $page = F('caiji_cid_' . $cValue['id']) ? F('caiji_cid_' . $cValue['id']) : 1;

            //如果页码大于100了，将页码初始化 从第一页开始采集
            if ($page > 10000) {
                $page = 1;
            }

            //采集列表类型
            //1单一网址 ， 2通配符网址， 3json， 4rss
            switch ($listType) {
                case 1:
                    // 单一网址采集 传入参数 1. cid page  2. listURL
                    $page = I('get.page', 1);
                    $cid = I('get.cid', 0);
                    $cj_id = I('get.cj_id', 0);

                    if ($cid) {
                        $cateInfo = M('Category')->find($cid);

                        $cateUrl = $cateInfo['url'];
                        $listURL = $cateUrl . $page . '/';
                    } else {
                        $listURL = I('get.listURL');
                    }
                    break;
                case 2:
                    // 通配符网址
                    $cj_id = $cValue['cj_id'];

                    if (get_domain($cValue['url']) == 'zghzp.com') {

                        if ($page == 1) {
                            $listURL = $cValue['url'] . '.html';
                        } else {
                            $listURL = $cValue['url'] . '_' . $page . '.html';
                        }

                    } elseif(get_domain($cValue['url']) == 'meirong.net') {
                        $listURL = $cValue['url'] . '_' . $page . '.html';
                    }else{
                        $listURL = $cValue['url'] . $page . '/';
                    }

                    break;
                case 3:
                    // json ajax方式
                    $cj_id = $cValue['cj_id'];
                    if (get_domain($cValue['url']) == 'menshealth.com') {
                        $url = $cValue['url'] . $page . '/11';
                        $post_data = [
                            'page' => $page,
                        ];
                    }
                    $output = request_post($url, $post_data);
                    $listURL = $output;

                    break;
                case 4:
                    // rss
                    break;
                default:
                    $this->error('type 参数错误');
                    continue;
            }

            //获取采集规则
            $listRole = get_list_role($cj_id);
            $articleListURL = QueryList::Query($listURL, $listRole)->data;
//dump($listRole);

//            dump($articleListURL);die;
            $articleCount = 0;
            //将数据存入数据库中
            foreach ($articleListURL as $url) {
                //获取文章
                $cjUrl = link_with_domain($cValue['cj_id'], $url['caijiurl']);
                $findArr = D('Article')->getByCaijiurl($cjUrl);

                //判断是否存在，不存在就存入文章
                if ($cjUrl != $findArr['caijiurl']) {
                    //存入文章
                    $articleCount++;


                    $url['caijiurl'] = link_with_domain($cValue['cj_id'], $url['caijiurl']);
                    $url['status'] = -10;
                    $url['cid'] = $cValue['id'] ? $cValue['id'] : -10;
                    $url['site_id'] = $cValue['site_id'] ? $cValue['site_id'] : -10;
                    $url['cj_id'] = $cValue['cj_id'];
                    $url['cover'] = $url['cover'];

                    $res = D('Article')->add($url);

                    if ($res) {
                        $ii++;
                        showMsg($url['caijiurl'] . " --  添加成功<br />", "red", $ii);
                        sleep(C(SLEEP_TIME));
                    } else {
                        echo $url['caijiurl'] . " --  没有加入数据库<br />";
                    }
                }
                //如果此页有数据，将页码写入缓存，供下一次循环读取
                if ($articleCount > 0) {
                    F('caiji_cid_' . $cValue['id'], $page);
//                    break;
                }
            }
            //如果此页没数据，将页码 + 1 写入缓存，供下一次循环读取
            if ($articleCount == 0) {
                $fpage = $page + 1;
                F('caiji_cid_' . $cValue['id'], $fpage);
                continue;
            }
            showMsg('分类ID = ' . $cValue['id'] . ' - 页码 = ' . $page . '<br/>', 'red');
        }

        showMsg("文章链接采集完成!");
        G('end');
        showMsg("文章链接采集完成! 采集到" . $ii . "个链接, 消耗了" . G('begin', 'end') . 's');
        sleep(C(SLEEP_TIME));
        showMsg("<hr/>");
    }


    /**
     * 采集所有链接 循环100次 按页码采集
     * Todo 此方法仅用于手动采集所以链接到数据库供后面的采集文章内容/翻译使用
     */
    public function caijiAllUrl()
    {
        for ($page = 1; $page < 10; $page++) {
            showMsg(" --  开始采集第" . $page . "页数据<br />", 'red');
            sleep(C(SLEEP_TIME));
            $this->caijiUrl();
        }
    }

    public function caijiArticle($limit = 1)
    {
        //获取所有分类
        $cjArticleMap = [
            'status' => 1,
        ];
        $cateData = get_cate_list($cjArticleMap);
//        dump($cateData);die;
        foreach ($cateData as $cKey => $cValue) {
            //实时显示提示信息 html
            showMsgHtml();
            showMsg("准备采集" . $cValue['id'] . "分类的文章!", 'red');

            $this->caijiOne($cValue['id'], $limit);
        }
    }

    /**
     * 根据分类ID采集某个分类的文章 采集数量可以自定义 默认为采集1条数据
     * @param int $cid 分类ID
     * @param int $limit
     */
    public function caijiOne($cid = 0, $limit = 1)
    {

        $ii = 0;
        showMsg("开始采集文章!");
        G('begin');
        sleep(SLEEP_TIME);

        $status = 1;  //是否需要翻译 0 需要翻译 1 不需要翻译 默认为0
        if ($cid) {
            $catInfo = get_cate_info($cid);
            $siteInfo = get_site_info($catInfo['site_id']);

            $cjMap['cid'] = $cid;
            $cjMap['site_id'] = $catInfo['site_id'];
        } else {
            $this->error('采集分类ID cid 必须！');
        }
        $cjMap['status'] = -10;

        //获取文章urls
        $URLs = D('Article')->where($cjMap)->order('id ASC')->limit($limit)->select();
        if (!is_array($URLs)) {
            $this->error('没有可以采集的文章了');
        }
//dump($URLs);die;
        foreach ($URLs as $key => $url) {
            //获取规则
            $ArticleRole = get_article_role($url['cj_id']);

            //获取文章keywords|description信息
            $seoInfo = get_keywords_description($url['caijiurl']);
//            dump($seoInfo);die;
            $cjRes = QueryList::Query($url['caijiurl'], $ArticleRole, '', get_out_code($url['cj_id']), get_in_code($url['cj_id']))->data;
            $article = $cjRes;
            //dump($ArticleRole);die;
            $artPage = getNumber($article[0]['page']);

            if($artPage){
                for($aP = 1;$aP <= $artPage;){

                    if($aP == 1){
                        $pCjUrl = $url['caijiurl'];
                    }else{
                        $pUrl= explode('.html', $url['caijiurl']);
//                    echo $pUrl[0];die;
                        $pCjUrl = $pUrl[0].'_'.$aP.'.html';

                    }

                    $cjRes = QueryList::Query($pCjUrl, $ArticleRole, '', get_out_code($url['cj_id']), get_in_code($url['cj_id']))->data;

                    $title[] = $cjRes[0]['title'];
                    $content[] = $cjRes[0]['content'];


                    $aP++;

                }
                $title = $title[0];
                $content = implode('', $content);

            }else{
                $cjRes = QueryList::Query($url['caijiurl'], $ArticleRole, '', get_out_code($url['cj_id']), get_in_code($url['cj_id']))->data;

                $title = $cjRes[0]['title'];

                $content = del3br($cjRes[0]['content']) . del3br($cjRes[1]['content']) . del3br($cjRes[2]['content']);
            }
//            dump($content);die;
            //将数据存入数据库
            $artData = [
                'id' => $url['id'],
                'site_id' => $catInfo['site_id'],
                'cid' => $cid,
                'title' => $title,
                'seo_keyword' => $seoInfo['keywords'],
                'seo_description' => $seoInfo['description'],
                'author' => $siteInfo['author'],
                'author_url' => $siteInfo['author_url'],
                'content' => $content,
                'status' => $status,
            ];

            if ($url['cover'] == '') {

                $artData['cover'] = $cjRes[0]['cover'];
            }
//            dump($artData);die;
            //判断标题或内容是否为空 若为空就设置状态为-100
            if ($cjRes[0]['title'] == '' || $cjRes[0]['content'] == '') {
                $artData['status'] = -100;
            } else {
                $artData['status'] = $status;
            }
            //保存数据
            $res = D('Article')->save($artData);

            if ($res) {
                $ii++;
                showMsg($url['caijiurl'] . '-- 采集成功', "", $ii);
                sleep(SLEEP_TIME);

            } else {
                showMsg($url['caijiurl'] . '-- 采集失败', "red", $ii);
                sleep(SLEEP_TIME);
            }
        }
        G('end');
        showMsg("文章采集完成! 采集到" . $ii . "个文章, 消耗了" . G('begin', 'end') . 's');
        sleep(SLEEP_TIME);
        showMsg("<hr/>");
    }


    /**
     * curl 定时采集 统一调用入口
     */
    public function reset()
    {
        //采集所有连接
//        $this->caijiAllUrl();


        // 1 采集列表 site1 site2 采集完成
        $this->caijiUrl();
        $this->caijiArticle(2); //自定义采集数量
//        A('NewCreate')->transArticle(1); //自定义翻译数量
        //首先把文章全部采集完，并翻译完成

        A('NewCreate')->makeAllHtml(2); //自定义生成html数量
    }

    public function reset2()
    {
        //采集所有连接
//        $this->caijiAllUrl();


        // 1 采集列表 site1 site2 采集完成
//        $this->caijiUrl();
//        $this->caijiArticle(2); //自定义采集数量
        A('NewCreate')->transArticle(50); //自定义翻译数量 每个1小时翻译一次 每小时翻译次数超过1000条就会被禁用一小时。
        //首先把文章全部采集完，并翻译完成


//        A('NewCreate')->makeAllHtml(2); //自定义生成html数量
    }

    public function reset_article()
    {

        $this->caijiArticle(200); //自定义采集数量
    }

    public function reset_trans()
    {

        A('NewCreate')->transArticle(1000); //自定义翻译数量
    }

    /**
     * 生成列表规则
     */
    public function caijiListRules()
    {
        $cjListRole = [
            'caijiurl' => ['.lbpic h3 a', 'href'],
            'cover' => ['.lbpic img', 'src'],
        ];
        $caijiR = serialize($cjListRole);

        echo $caijiR;
        die;
    }

    /**
     * 生成文章规则
     */
    public function caijiArticleRules()
    {

        $cjArticleRole = [
            // 'title' => ['h1', 'text'],
            // 'content' => ['.content', 'text', '.meta'],
            // 'cover' => ['.content img', 'src'],
            'title' => ['.view_main1 h1', 'text'],
            'content' => ['.content', 'text'],
            'page' => ['.pagelist a', 'text']
        ];

        $caijiR = serialize($cjArticleRole);

        echo $caijiR;
        die;
    }

    public function test()
    {    //$listURL = 'https://www.revealnews.org/blog/its-ok-to-pray-in-the-courtroom-texas-top-attorney-says/';

        $listURL = 'http://www.zghzp.com/news/hyzx/hyzc/6308.html';
        $listRole = [
            'title' => ['h1', 'text'],
            'content' => ['.content', 'text', '.meta'],
            'cover' => ['.content img', 'src'],
            // 'title' => ['h1', 'text'],
//'content' => ['#MyContent', 'text'],
            //        'cover' => ['.con_detail img', 'src'],
        ];

        $articleListURL = QueryList::Query($listURL, $listRole)->data;

        dump($articleListURL);
        die;
    }

    public function tt(){
        $str = '近日，记者从新疆普济堂医药零售连锁有限公司了解到，该公司自今年5月份牵手于洗化业界，以“店中店”的经营模式经营以来，已经展现出一个良好的开端。
 今年5月份开业的“普济堂米泉店”是“店中店”经营模式的先行者。该店总经营面积800多平方米，其中，洗化用品的经营面积达到200多平方米。除了经营药品之外，还经营洗涤、化妆、卫生用品。据新疆普济堂医药零售连锁有限公司红山分店的负责人王经理介绍，目前，米泉店洗化产品的经营面积最大，与洗化行业知名度比较高的品牌的代理商、经销商合作十分愉快。就目前洗化用品的销售情况来看，每天的营业额超过1000元。
 “普济堂”进军洗化市场，以“店中店”的经营模式进行经营，是“普济堂”向香港、广州等地学习的结果。就”店中店“经营模式的益处，王经理谈了他的三点看法：一是便民，因为经营的洗化产品基本上是平进平出；二是带动医药产品的销售，因为洗化用品都是消费者的日常生活用品；三是给洗化行业的代理商和经销商带来方便，因为只要是三证齐全的西化产品都可以进入药品超市销售，不需缴纳任何进场费用，而且有些产品可以现款现货。';
        $ret = nl2br($str);
        echo $ret;die;
    }
}

